package com.xwm93up.basic.enumtips;

/**
 * @Description: desc
 * @Author: xwm93up
 * @Since: 2021/11/30 9:32
 */
public enum UserRole {
    ROLE_ROOT_ADMIN("系统管理员", 000000), // 系统管理员
    ROLE_ORDER_ADMIN("订单管理员", 100000), // 订单管理员
    ROLE_NORMAL("普通用户", 200000) //普通用户
    ;

    // 自定义属性
    private final String roleName; // 角色名称
    private final Integer roleCode; // 角色编码

    // 自定义构造函数
    UserRole(String roleName, Integer roleCode) {
        this.roleName = roleName;
        this.roleCode = roleCode;
    }

    // 自定义方法
    public String getRoleName() {
        return this.roleName;
    }

    public Integer getRoleCode() {
        return this.roleCode;
    }

    public static Integer getRoleCodeByRoleName(String roleName) {
        for (UserRole enums : UserRole.values()) {
            if (enums.getRoleName().equals(roleName)) {
                return enums.getRoleCode();
            }
        }
        return null;
    }

    public static void main(String[] args) {
        UserRole roleRootAdmin = UserRole.ROLE_ROOT_ADMIN;
        UserRole roleOrderAdmin = UserRole.ROLE_ORDER_ADMIN;
        UserRole roleNormal = UserRole.ROLE_NORMAL;

        // values()方法: 返回所有枚举常量的数组集合
        UserRole[] values = UserRole.values();
        for (UserRole role : values) {
            System.out.println(role);
        }
        // 打印:
        // ROLE_ROOT_ADMIN
        // ROLE_ORDER_ADMIN
        // ROLE_NORMAL

        // ordinal()方法: 返回枚举常量的序号, 注意是从0开始
        System.out.println(roleRootAdmin.ordinal()); // 打印0
        System.out.println(roleOrderAdmin.ordinal()); // 打印1
        System.out.println(roleNormal.ordinal()); // 打印2

        // compareTo()方法: 枚举常量间的比较， 用点像是用序号相减
        System.out.println(roleRootAdmin.compareTo(roleOrderAdmin)); // 打印-1
        System.out.println(roleOrderAdmin.compareTo(roleNormal)); // 打印-1
        System.out.println(roleRootAdmin.compareTo(roleNormal)); // 打印-2

        // name()方法: 获得枚举常量的名称
        System.out.println(roleRootAdmin.name()); // 打印ROLE_ROOT_ADMIN
        System.out.println(roleOrderAdmin.name());// 打印ROLE_ORDER_ADMIN
        System.out.println(roleNormal.name());// 打印ROLE_NORMAL

        // valueof()方法: 返回指定名称的枚举常量
        System.out.println(UserRole.valueOf("ROLE_ROOT_ADMIN"));// 打印ROLE_ROOT_ADMIN
        System.out.println(UserRole.valueOf("ROLE_ORDER_ADMIN"));// 打印ROLE_ORDER_ADMIN
        System.out.println(UserRole.valueOf("ROLE_NORMAL"));// 打印ROLE_NORMAL

        // 用于switch语句中
        UserRole userRole = UserRole.ROLE_ORDER_ADMIN;
        switch (userRole) {
            case ROLE_ROOT_ADMIN: // 比如此处的意义就非常清晰了，比1，2，3这种数字好！
                System.out.println("这是系统管理员角色");
                break;
            case ROLE_ORDER_ADMIN: // 比如此处的意义就非常清晰了，比1，2，3这种数字好！
                System.out.println("这是订单管理员角色");
                break;
            case ROLE_NORMAL: // 比如此处的意义就非常清晰了，比1，2，3这种数字好！
                System.out.println("这是普通角色");
                break;
        }
    }
}
